//
//  CZUserAccountViewModel.swift
//  CZWeibo
//
//  Created by 左凯旭 on 16/8/11.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

class CZUserAccountViewModel: NSObject {

    //创建一个全局的访问点
    static let shareTools:CZUserAccountViewModel = CZUserAccountViewModel()
    
    //设置路径
    let filePath = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("userAccount.archiver")
    
    //创建一个用户对象，防止频繁的访问沙盒
    var userAccount:CZUserAccountModel?
    
    override init() {
         // 给当前类身上的属性赋值
        super.init()
        userAccount = getUserAccount()
    }
    
    
    var accessToken:String?{
        if userAccount?.access_token != nil {
            // 如果微博返回来的的时间 和当前的时间比较为降序 就代表没有过期
            if userAccount?.expires_Date?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
                return userAccount?.access_token
            }else{
                return nil
            }
            
            
        }else{
            //代表没有登陆过
            return nil
        }
        
    }
    
      // 判断用户是否登录(如果accessToken为nil 就代表没有登录)
    var isLogin:Bool{
        return accessToken != nil
    }
    
    
    
}

//保存数据
extension CZUserAccountViewModel{
    //保存对象
    func saveUserAccount(userAccount:CZUserAccountModel){
//       print(filePath)
        // 如果第一次保存数据成功后 使用userAccount  为nil
        //- 因为在第一次单例实例化的时候 走init方法 对userAccount赋值 从沙盒获取对象就是为nil 单例只会走一次init方法 所以不能再赋值 只能在保存对象的时候 程序员手动的为当前单例身上的对象赋值
        self.userAccount = userAccount
        NSKeyedArchiver.archiveRootObject(userAccount, toFile: filePath)
    }
    
    //获得对象
    func getUserAccount()->CZUserAccountModel?{
      
        let result = NSKeyedUnarchiver.unarchiveObjectWithFile(filePath) as? CZUserAccountModel
        return result
    }
}

//请求数据
extension CZUserAccountViewModel{
    
    //获取授权
    func getUserAccount(code:String,finish:(isSuccess:Bool)->()){
        
        
        CZNetWorkingTools.sharedTools.loadUserAccount(code, succes: { (response) in
//            print("请求成功\(response)")
            // 判断response 是否为nil 而且是否可以转成一个字典
            // 如果你使用if-let 或者gurad 判断可选值是否可以转成我们想要的类型 一般均使用as?
            guard let res = response as?[String:AnyObject] else{
                finish(isSuccess: false)
                return
            }
            
            // 通过字典创建一个模型
            let userAccount = CZUserAccountModel(dict:res)
            //            print(userAccount)
            //调用
            self.getUserInfo(userAccount, finish: finish)
        }) { (error) in
            print("请求失败\(error)")
        }
        
        
    }
    
    
    //获取用户信息
    func getUserInfo(userAccount:CZUserAccountModel,finish:(isSuccess:Bool)->()){
        
        
        
        CZNetWorkingTools.sharedTools.loadUserInfo(userAccount, succes: { (response) in
            
            //判断是否为nil 是否可以转为一个字典
            guard let res = response as?[String:AnyObject] else{
                finish(isSuccess: false)
                return
            }
            //赋值
            userAccount.screen_name = res["screen_name"] as? String
            userAccount.avatar_large = res["avatar_large"] as? String
            
//            print(userAccount)
            
            //保存对象
            self.saveUserAccount(userAccount)
            
            
            //请求成功
            finish(isSuccess: true)
            
        }) { (error) in
            print("请求失败\(error)")
        }
        
        
    }
    
    
}